/**
 * @(#)DateUtils.java
 * Copyright (C) 2003-2010 iocn.org All rights reserved
 */
package org.iocn.common;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;


/**
 * 时间日期工具类
 * 
 * @author <b>Oxidy</b>, Copyright &#169; 2010
 * @version 0.1,2010-6-7
 */
public class DateUtils {
    
    private final static Logger log = Logger.getLogger(DateUtils.class);
    /**
     * 获取当前系统时间，并格式化为：yyyy-MM-dd HH:mm:ss 形式。
     * @return String类型，yyyy-MM-dd HH:mm:ss 形式。
     */
    public static String getCurrentDateTime() {
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date currentDate = new Date();
            return formatter.format(currentDate);
        } catch (Exception e) {
            log.error(e.getMessage());
            return null;
        }
    }

    /**
     * 获取当前系统时间，并格式化为：yyyy-MM-dd HH:mm:ss 形式。
     * @return Date类型，yyyy-MM-dd HH:mm:ss 形式。
     */
    public static Date getCurrentDateTimeDate() {
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return formatter.parse(getCurrentDateTime());
        } catch (Exception e) {
            log.error(e.toString());
            return null;
        }
    }

    /**
     * 格式化时间格式为：yyyy-MM-dd HH:mm:ss。
     * @param date
     *            时间值
     * @return 字符串类型，可直接插入数据库中时间类型的字段中。
     * @deprecated 由{@link Utils#covertDate2String(Date)}代替
     */
    public static String getCurrentDateTime(Date date) {
        String strReturnDate = null;
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            strReturnDate = formatter.format(date);
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        return strReturnDate;
    }

    /**
     * Date类型时间转换为String型，并格式化时间格式为：yyyy-MM-dd HH:mm:ss。
     * @param date
     *            时间值
     * @return 字符串类型，格式为：yyyy-MM-dd HH:mm:ss。
     */
    public static String covertDate2String(Date date) {
        return getCurrentDateTime(date);
    }

    /**
     * Date类型时间转换为String型，并格式化时间格式为：yyyy-MM-dd HH:mm:ss。
     * @param date
     *            时间值
     * @return 字符串类型，格式为：yyyy-MM-dd HH:mm:ss。
     */
    public static Date covertString2Date(String date) {
        if (date == null || date.equals("")) {
            date = "1900-01-01 00:00:00";
        }
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return formatter.parse(date);
        } catch (Exception e) {
            log.error(e.toString());
            return null;
        }
    }

    /**
     * 获得格式化后的日期和时间，形式：yyyyMMddHHmmss
     * @param strDateTime
     *            是形式为：yyyy-MM-dd HH:mm:ss
     * @return 形式（yyyyMMddHHmmss）
     * @modify lifw20080401
     */
    public static String getStrDateTime(String strDateTime) {
        strDateTime = strDateTime.replaceAll(":", "");
        strDateTime = strDateTime.replaceAll("-", "");
        strDateTime = strDateTime.replaceAll(" ", "");
        return strDateTime;
    }

    /**
     * 获得日期（YYYY-MM-DD）
     * @param strDate
     *            标准字符串日期
     * @return 字符串型日期（YYYY-MM-DD）
     */
    public static String getStrDate(String strDate) {
        String strReturnDate = null;
        if (strDate == null || strDate.equals("")) {
            strDate = "1900-01-01 00:00:00";
        }
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            strReturnDate = formatter.format(formatter.parse(strDate));
        } catch (ParseException e) {
            log.error(e.getMessage());
        }
        return strReturnDate;
    }

    /**
     * 获得日期（YYYY-MM-DD）
     * @param strDate
     *            标准字符串日期
     * @return 字符串型日期（YYYY-MM-DD）
     */
    public static String getStrDate(Date date) {
        String strReturnDate = null;
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        strReturnDate = formatter.format(date);
        return strReturnDate;
    }
}
